/*
  学习目标：映射类型
  作用： 从旧结构中，转换成新的键和值类型
  语法：
    理解：in 类似for in循环，会把所有的键拷贝一遍
    {
      [key in keyof 类型]: 类型
    }
  注意：💥 映射类型只能在type类型别名各中使用，不能在interface中使用
 
*/

type Person = {
  name: string;
  age: string;
};

const obj = {
  name: 'zs',
  age: 19,
};

type ReadOnlyMy = Readonly<Person>;
// 练习1： 把所有键的值转换为数字类型
type NumPerson = {
  [key in keyof Person]: number;
};

const zsNum: NumPerson = {
  name: 123,
  age: 123,
};

// 练习 手动实现Readonly
type IMyReadonly<T> = {
  readonly [P in keyof T]: T[P];
};
